package com.zry.simpleBlog.comment.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author zry
 * @create 2022-04-21 10:30
 */
public class StringUtil {

    public static final String COMMA = ",";

    public static final String SPACE = " ";

    public static final String COLON = ":";

    public static final String BLANK = "\\s+";

    private static final char[] FILE_ILLEGAL_CHARS = {'/', '\'', '"', '?', ':', '<', '>', '*', '|'};

    /**
     * 功能描述:作用将字符串以 ',' 分割为字符数组
     *
     * @param
     *
     * @return
     */
    public static List<String> convertToList(String ids) {
        List<String> list = new ArrayList();
        if (!"".equals(ids) && ids != null) {
            String[] idarray = ids.split(COMMA);
            for (String s : idarray) {
                list.add(s);
            }
        }
        return list;
    }

    /**
     * 判断字符串是否为NULL或空字符串
     *
     * @param s
     *
     * @return
     */
    public static boolean isEmptyOrBlank(String s) {
        return s == null || s.trim().isEmpty();
    }

    /**
     * 移除字符串中的特殊字符
     * @param s 要处理的字符串
     * @return 处理结果
     */
    public static String removeSpecialChar(String s) {
        if (isEmptyOrBlank(s)) {
            return s;
        }
        return s.replaceAll("[^\\p{L}\\p{M}\\p{N}\\p{P}\\p{Z}\\p{Cf}\\p{Cs}\\s]", "");
    }
    /**
     * 组合字符串
     * 用下划线分隔
     *
     * @param strs
     * @return
     */
    public static String combineWithUnderline(String... strs) {
        return combineByChar('_', strs);
    }


    /**
     * 用指定的字符组合字符串
     *
     * @param c
     * @param strs
     * @return
     */
    public static String combineByChar(char c, String... strs) {
        String result = "";
        for (String str : strs) {
            if (isEmptyOrBlank(str))
                continue;
            if (result == "")
                result += str.trim();
            else
                result += c + str.trim();
        }
        return result.trim();
    }

    /**
     * 去掉文件名中的非法字符
     *
     * @param name
     * @return
     */
    public static String escapeFileName(String name) {
        if (isEmptyOrBlank(name))
            return name;
        for (char c : FILE_ILLEGAL_CHARS) {
            name = name.replace(c, '-');
        }
        return name;
    }


    /**
     * Long 类型转换为 int
     * @param num Long 类型值
     * @return 转换结果
     */
    public static int paresLong(Long num) {
        return num == null ? 0 : Math.toIntExact(num);
    }

    /**
     * 安全的去除字符串的前后空格
     * @param str 原字符串
     * @return 去除前后空格的字符串
     */
    public static String trim(String str) {
        return str == null ? null : str.trim();
    }

    /**
     * 采用逗号分隔符，分隔字符串为数组，并去掉两侧空字符串和过滤掉空字符串
     *
     * @param commaSeparatedStr 目标字符串
     * @return 分隔后的数组
     */
    public static String[] split(String commaSeparatedStr) {
        if (commaSeparatedStr == null) {
            return new String[0];
        }
        return Stream.of(commaSeparatedStr.split(StringUtil.COMMA))
                .map(String::trim)
                .filter(str -> !str.isEmpty())
                .toArray(String[]::new);
    }

    /**
     * 格式化数字为字符串，显示正负号，若为零，返回 0
     * @param value 需要格式化的数字
     * @return 格式化后的字符串
     */
    public static String formatNumberToString(int value) {
        if (value == 0) {
            return "0";
        } else if (value > 0) {
            return String.format("↑ %d", value);
        } else {
            return String.format("↓ %d", Math.abs(value));
        }
    }

}
